/**
 * 测试数据生成器
 * 用于生成各种测试数据
 */

// 生成随机字符串
const generateRandomString = function(length = 10) {
    const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
    let result = '';
    for (let i = 0; i < length; i++) {
        result += chars.charAt(Math.floor(Math.random() * chars.length));
    }
    return result;
};

// 生成随机邮箱
const generateRandomEmail = function() {
    const username = generateRandomString(8);
    const domains = ['gmail.com', 'yahoo.com', 'hotmail.com', 'outlook.com'];
    const domain = domains[Math.floor(Math.random() * domains.length)];
    return `${username}@${domain}`;
};

// 生成随机名称
const generateRandomName = function() {
    const firstNames = ['张', '李', '王', '刘', '陈', '杨', '赵', '黄', '周', '吴'];
    const lastNames = ['伟', '芳', '娜', '秀英', '敏', '静', '丽', '强', '磊', '军'];
    const firstName = firstNames[Math.floor(Math.random() * firstNames.length)];
    const lastName = lastNames[Math.floor(Math.random() * lastNames.length)];
    return firstName + lastName;
};

// 生成智能体测试数据
const generateAgentData = function() {
    const agentTypes = [0, 1, 2, 3, 99];
    const prompts = [
        '你是一个智能助手，请根据用户的需求提供帮助。',
        '我是一个代码助手，可以帮助你解决编程问题。',
        '我是一个翻译助手，可以帮你翻译各种语言。',
        '我是一个数据分析助手，可以帮你分析数据。'
    ];

    return {
        name: `测试智能体_${generateRandomString(6)}`,
        description: `这是一个用于测试的智能体，创建于 ${new Date().toISOString()}`,
        agentType: agentTypes[Math.floor(Math.random() * agentTypes.length)],
        systemPrompt: prompts[Math.floor(Math.random() * prompts.length)],
        configuration: JSON.stringify({
            model: 'gpt-4',
            temperature: Math.random().toFixed(2),
            maxTokens: Math.floor(Math.random() * 4000) + 1000
        }),
        maxTokens: Math.floor(Math.random() * 4000) + 1000,
        temperature: parseFloat((Math.random() * 2).toFixed(2)),
        timeoutSeconds: Math.floor(Math.random() * 60) + 10,
        isActive: Math.random() > 0.3
    };
};

// 生成对话测试数据
const generateConversationData = function(agentId) {
    const titles = [
        '产品咨询',
        '技术支持',
        '功能演示',
        '问题反馈',
        '使用指导'
    ];

    return {
        agentId: agentId || pm.environment.get('agentId') || generateRandomString(32),
        title: titles[Math.floor(Math.random() * titles.length)] + '_' + generateRandomString(4),
        description: `这是一个测试对话，创建于 ${new Date().toISOString()}`,
        initialMessage: '你好，我想咨询一些问题。'
    };
};

// 生成MCP服务器测试数据
const generateMcpServerData = function() {
    return {
        name: `测试MCP服务器_${generateRandomString(6)}`,
        serverUrl: `http://localhost:${Math.floor(Math.random() * 9000) + 1000}`,
        description: `这是一个测试MCP服务器，用于${generateRandomString(10)}功能测试。`,
        connectTimeoutMs: Math.floor(Math.random() * 10000) + 1000,
        isActive: Math.random() > 0.3
    };
};

// 生成MCP工具测试数据
const generateMcpToolData = function() {
    const toolTypes = ['fileSystem', 'http', 'database', 'codeExecution', 'search'];
    const commands = [
        'ls -la',
        'curl -X GET',
        'SELECT * FROM',
        'python3 -c',
        'grep -r'
    ];

    return {
        name: `测试工具_${generateRandomString(6)}`,
        description: `这是一个测试工具，用于${generateRandomString(10)}操作。`,
        toolType: toolTypes[Math.floor(Math.random() * toolTypes.length)],
        command: commands[Math.floor(Math.random() * commands.length)] + ' {{param}}',
        version: `${Math.floor(Math.random() * 10)}.${Math.floor(Math.random() * 10)}.${Math.floor(Math.random() * 10)}`,
        parameters: JSON.stringify({
            param: {
                description: '参数描述',
                type: 'string',
                required: true
            }
        }),
        isActive: Math.random() > 0.3,
        timeoutSeconds: Math.floor(Math.random() * 60) + 10
    };
};

// 生成提示词模板测试数据
const generatePromptTemplateData = function() {
    const templateTypes = ['chat', 'completion', 'instruction', 'system'];
    const categories = ['通用', '技术', '客服', '教育', '娱乐'];
    const templates = [
        '请根据用户需求提供帮助：{{user_request}}',
        '请翻译以下内容：{{content}}',
        '请分析以下数据：{{data}}',
        '请回答以下问题：{{question}}'
    ];

    return {
        name: `测试模板_${generateRandomString(6)}`,
        description: `这是一个测试模板，用于${generateRandomString(10)}场景。`,
        content: templates[Math.floor(Math.random() * templates.length)],
        templateType: templateTypes[Math.floor(Math.random() * templateTypes.length)],
        category: categories[Math.floor(Math.random() * categories.length)],
        tags: ['测试', '自动生成'],
        parameters: JSON.stringify({
            user_request: {
                type: 'string',
                description: '用户请求',
                required: true
            }
        }),
        version: 1,
        isActive: true
    };
};

// 设置环境变量
const setEnvironmentVariables = function(data, type) {
    switch (type) {
        case 'agent':
            pm.environment.set('agentId', data.id);
            console.log('Agent ID set:', data.id);
            break;
        case 'conversation':
            pm.environment.set('conversationId', data.id);
            console.log('Conversation ID set:', data.id);
            break;
        case 'mcpServer':
            pm.environment.set('mcpServerId', data.id);
            console.log('MCP Server ID set:', data.id);
            break;
        case 'mcpTool':
            pm.environment.set('mcpToolId', data.id);
            console.log('MCP Tool ID set:', data.id);
            break;
        case 'template':
            pm.environment.set('templateId', data.id);
            console.log('Template ID set:', data.id);
            break;
        default:
            console.warn('Unknown type:', type);
    }
};

// 清理测试数据
const cleanupTestData = function() {
    const idsToClean = [
        'agentId',
        'conversationId',
        'mcpServerId',
        'mcpToolId',
        'templateId'
    ];

    idsToClean.forEach(id => {
        const value = pm.environment.get(id);
        if (value) {
            console.log(`Cleaning up ${id}:`, value);
            // 这里可以添加删除逻辑
            pm.environment.unset(id);
        }
    });
};

// 导出函数
module.exports = {
    generateRandomString,
    generateRandomEmail,
    generateRandomName,
    generateAgentData,
    generateConversationData,
    generateMcpServerData,
    generateMcpToolData,
    generatePromptTemplateData,
    setEnvironmentVariables,
    cleanupTestData
};